#! python3
# 使用python-docx模块操作word文档

import docx
from docx.enum.text import WD_BREAK


def readDocument(filename):
    """
    读取word文档
        Document 对象包含一个 Paragraph 对象的列表，表示文档中的段落（用户在 Word 文档中输入时，
    如果按下回车，新的段落就开始了）。
        每个 Paragraph 对象都包含一个 Run 对象的列表。当文本样式发生改变时，就需要一个新的 Run 对象.
    :param filename:
    :return:
    """
    doc = docx.Document(filename)
    # print("段落数：", len(doc.paragraphs))  # Paragraph对象的列表

    paragraphs = doc.paragraphs  # 段落
    # print(paragraphs[0].text, paragraphs[1].text, sep='\n')  # 取段落的文本

    # runs = paragraphs[1].runs  # Run对象：当文本样式发生改变时，就需要一个新的 Run 对象
    # for run in runs:
    #     print(run.text)  # 取Run对象的文本

    text = []
    for paragraph in paragraphs:
        text.append(paragraph.text)

    return text


def createDocument(filename, paragraphs, runs):
    """
    创建并写入 Word 文档
    :param filename: 文件名
    :param paragraphs: 段落列表
    :return:
    """
    doc = docx.Document()
    run_res = ""
    if len(paragraphs) != 0:
        # 添加段落文本
        for i in range(len(paragraphs)):
            text = paragraphs[i]
            if i == 0:
                doc.add_heading(text, i)  # 添加标题:add_heading(标题名称, 标题级别)
            else:
                doc.add_paragraph(text)  # 添加段落

        # 在段落后追加文本
        if len(runs) != 0:
            for key, value in runs.items():
                if int(key) > len(paragraphs):
                    run_res += "总段落数为%s,在第%s段后追加文本失败!" % (len(paragraphs), key)
                    continue
                else:
                    doc.paragraphs[int(key) - 1].add_run(value)

        # 添加换行符和分页符
        doc.paragraphs[2].runs[1].add_break()  # 添加换行符（不是开始一个新的段落）
        doc.paragraphs[3].runs[0].add_break(WD_BREAK.PAGE)  # 添加换页符

        #  添加2张图像:第一张为原始尺寸，第二张宽度为4英寸，高度为5厘米
        doc.add_paragraph("IBM_LOGO1")
        doc.add_picture('docx/IBM_logo.jpg')
        doc.add_paragraph("IBM_LOGO2")
        doc.add_picture('docx/IBM_logo.jpg', width=docx.shared.Inches(4), height=docx.shared.Cm(5))
        doc.add_paragraph("end")

        result = "成功创建文档!"
    else:
        result = "成功创建文档，未写入任何信息!"

    doc.save(filename)
    return "".join([result, run_res])


# paraObj1.add_run(' This text is being added to the second paragraph.')

if __name__ == '__main__':
    # print(readDocument('docx/demo.docx'))

    paragraphs = ['Hello world!', '你好中国!', '你好(#^.^#)新疆!', '你好o(*￣︶￣*)o乌鲁木齐!',
                  str(520), str(521), str(522)]  # 要添加的段落列表
    runs = {'2': '你好新疆!你好乌鲁木齐!',
            '3': '加油新疆!加油乌鲁木齐!You can do it!'}  # 需要在第2和3段后面追加的内容
    print(createDocument('docx/new.docx', paragraphs, runs))
